package com.keitaitoys.fonteditor.gui.preferences;

import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JColorChooser;
import javax.swing.JDialog;

import com.keitaitoys.fonteditor.core.LocaleManager;
import com.keitaitoys.fonteditor.core.Manager;
import com.keitaitoys.fonteditor.core.PreferencesManager;
import com.keitaitoys.fonteditor.core.PropertiesManager;
import com.keitaitoys.fonteditor.event.LocaleChangeEvent;
import com.keitaitoys.fonteditor.event.LocaleChangeListener;

public class PreferencesEditorBoundsColorChooser extends JColorChooser implements LocaleChangeListener, ActionListener {

	//////////////////////////////////////////////////////////////////////
	// Description ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Consts ////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private static final String TITLE_LOCALIZE_KEY = "preferences.editor.colorchooser.bounds.title";
	
	public static final String DIALOG_TITLE_CHANGED_PROPERTY = "dialogTitleChanged";

	//////////////////////////////////////////////////////////////////////
	// Variables /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private JDialog dialog;
    private String dialogTitle;
    
    private Color color;

	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public PreferencesEditorBoundsColorChooser() {
		
		Manager manager = Manager.getInstance();
		manager.registerPreferencesEditorBoundsColorChooser(this);

		LocaleManager localeManager = LocaleManager.getInstance();
		localeManager.addLocaleChangeListener(this);

		init();
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private void init() {
		
		setEnabled(true);

		PreferencesManager preferencesManager = PreferencesManager.getInstance();
		setColor(preferencesManager.getEditorBoundsColor());

		localize();
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public Color showChooseDialog(Component parent) {
		
		color = null;
		
		dialog = createDialog(parent, dialogTitle, true, this, this, null);
		dialog.setVisible(true);
		
		return color;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

    public void setDialogTitle(String dialogTitle) {

    	String oldValue = this.dialogTitle;
    	
    	this.dialogTitle = dialogTitle;
    	
		if(dialog != null) {
		    dialog.setTitle(dialogTitle);
		}

    	firePropertyChange(DIALOG_TITLE_CHANGED_PROPERTY, oldValue, dialogTitle);
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void actionPerformed(ActionEvent e) {
		
		color = getColor();
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private void localize() {
		
		LocaleManager localeManager = LocaleManager.getInstance();
		setDialogTitle(localeManager.getValue(TITLE_LOCALIZE_KEY));
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void localeChange(LocaleChangeEvent e) {
		
		localize();
	}
}